home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 November / PCWNOV08.iso / Software / Freeware / Mini Map Sidebar 0.3 / mini_map_sidebar-0.3.0-fx.xpi / chrome / content / maps.js < prev    next >
Encoding:
JavaScript  |  2008-07-11  |  53.0 KB  |  1,482 lines

  1. // *****************global/common variables********************
  2.  
  3. var gBundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService);
  4. var minimapperstrings = gBundle.createBundle("chrome://minimap/locale/maps.properties");
  5.  
  6.  
  7. const gPrefs = Components.classes["@mozilla.org/preferences-service;1"]
  8.     .getService(Components.interfaces.nsIPrefService)
  9.     .QueryInterface(Components.interfaces.nsIPrefBranch);
  10. const gmaps_Branch = gPrefs.getBranch("gmaps.");
  11. const nsIRDFRemoteDataSource        = Components.interfaces.nsIRDFRemoteDataSource;
  12.  
  13.  
  14. var $ = function(x) { return  document.getElementById(x); };
  15.  
  16. mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
  17.                    .getInterface(Components.interfaces.nsIWebNavigation)
  18.                    .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
  19.                    .rootTreeItem
  20.                    .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
  21.                    .getInterface(Components.interfaces.nsIDOMWindow);
  22.  
  23. var gMapsDS = null;
  24. var gAddress = null;
  25. var gAddressB = null;
  26. var gTitle = null;
  27. var gUrl = null;
  28. var gDescription = null;
  29. var gGeocodeType = null;
  30. var gObserver = {
  31.     onAssert            : function(ds, source, predicate, target){
  32.                             //rebuildDs();
  33.                           },
  34.     onUnassert          : function(ds, source, predicate, target){
  35.                             //rebuildDs();
  36.                           },
  37.     onChange            : function(ds, source, predicate, oldTarget, newTarget){
  38.                             //rebuildDs();
  39.                           },
  40.     onMove              : function(ds, oldSource, newSource, predicate, target){},
  41.     onBeginUpdateBatch  : function(ds){},
  42.     onEndUpdateBatch    : function(ds){}
  43. };
  44.  
  45. var addressObserver={
  46.      onDragStart: function(event, transferData, action){
  47.         try{
  48.             var tree = $('address_list');
  49.             var selectedItems = flock_getTreeSelection(tree, ["idCol"]);
  50.             if(!selectedItems) return false;
  51.             if(selectedItems.length == 0) return false;
  52.             var src = "";
  53.             var txt = "";
  54.  
  55.             if (selectedItems.length == 1) {
  56.                 src = createLink(selectedItems[0]["idCol"]);
  57.             } else {
  58.                for (var i = 0; i < selectedItems.length; ++i) {
  59.                     var item = selectedItems[i];
  60.                     src = src + "<p>"+createLink(item["idCol"])+"</p>";
  61.                }
  62.             }
  63.  
  64.             transferData.data=new TransferData();
  65.             transferData.data.addDataForFlavour("text/html", src);
  66.             transferData.data.addDataForFlavour("text/unicode", src);
  67.         }
  68.         catch(e){
  69.         }
  70.     },
  71.     onClick: function( event ) {
  72.         alert(event);
  73.     }
  74. };
  75.  
  76.  
  77. // ################ end of global/common variables ####################
  78.  
  79. //***************** init / close code *****************************************
  80.  
  81. function initMaps() {
  82.   document.getElementById("mapsContext").addEventListener("popupshowing", mapsPopupShowing, false);
  83.   var addlistheight = gPrefs.getIntPref("extensions.gmaps.addresslistheight");
  84.   $('maps-deck').setAttribute('height',addlistheight);
  85.   var ds = flock_mapsGetDS();
  86.   var ui = document.getElementById('address_list');
  87.   ui.database.AddDataSource(ds.getRawDataSource());
  88.   ui.ref = "urn:flock:maps:addresses";
  89.   ui.builder.rebuild();
  90.   rebuildMap();
  91.   var datasource = ds.getRawDataSource().QueryInterface (nsIRDFRemoteDataSource);
  92.   datasource.AddObserver(gObserver);
  93.   directionsSetPathway(); 
  94.   //addGeoXmlLayers();
  95. }
  96.  
  97. // huge hack, really bad
  98. testForLoad();
  99.  
  100. function testForLoad(){
  101.     try{
  102.     var loadfunc = minimapBrowserScope().webTestForLoad();
  103.     if (loadfunc == 'true'){
  104.     addGeoXmlLayers();
  105.     }
  106.     else{
  107.     setTimeout('testForLoad()',100);        
  108.     }
  109.     }
  110.     catch(err){
  111.     setTimeout('testForLoad()',100);
  112.     }
  113. }
  114.  
  115. function mapHome() {
  116.   var type = gPrefs.getCharPref("extensions.gmaps.start.maptype");
  117.   extMapType(type);
  118.   var homeLat = gPrefs.getCharPref("extensions.gmaps.mapHomeLat");
  119.   var homeLon = gPrefs.getCharPref("extensions.gmaps.mapHomeLon");
  120.   minimapBrowserScope().webSetHome(homeLat, homeLon); 
  121. }
  122.  
  123. function closeMaps() {
  124.   var ds = flock_mapsGetDS();
  125.   var datasource = ds.getRawDataSource().QueryInterface (nsIRDFRemoteDataSource);
  126.   datasource.Flush();
  127.   datasource.RemoveObserver(gObserver);
  128. }
  129.  
  130. // ##################### end of init / close code #############################
  131.  
  132. //********************** datasource code ******************************
  133.  
  134. function flock_mapsGetDS() {
  135.   var RDFService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService().QueryInterface(Components.interfaces.nsIRDFService);
  136.   var dirService = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties);
  137.   var profileDir = dirService.get('ProfD', Components.interfaces.nsILocalFile);
  138.  
  139.   if(!gMapsDS) {
  140.     // Create file object in the user's profile path.
  141.     var file = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
  142.     file.initWithPath(profileDir.path);
  143.     file.append('flock_maps.rdf');
  144.     if(!file.exists()) file.createUnique(0,0700);
  145.       // Create the datasource and a sequence
  146.       gMapsDS = new RDFDataSource('file://'+file.path);
  147.       var root = gMapsDS.getNode("urn:flock:maps:addresses");
  148.       root.makeSeq();
  149.       var rootkml = gMapsDS.getNode("urn:flock:maps:kml");
  150.       rootkml.makeSeq();
  151.     }
  152.   return gMapsDS;
  153. }
  154.  
  155. function rebuildDs() {
  156.   var ds = flock_mapsGetDS();
  157.   var ui = document.getElementById('address_list');
  158.   ui.database.AddDataSource(ds.getRawDataSource());
  159.   ui.ref = "urn:flock:maps:addresses";
  160.   ui.builder.rebuild();
  161. }
  162.  
  163. function _mns(str) {
  164.   return "http://www.flock.com/rdf/maps#" + str;
  165. }
  166.  
  167. function addressCount(){
  168.   var ds = flock_mapsGetDS();
  169.   var root = ds.getNode("urn:flock:maps:addresses");
  170.   // Just using getChildCount() doesn't work for some reason. Too bad for now.
  171.   var cnt=0;
  172.   var children = root.getChildren();
  173.   while(children.hasMoreElements()){
  174.   children.getNext();
  175.   cnt++;
  176.   }
  177.   return cnt;
  178. }
  179.  
  180. function rebuildMap( ) {
  181.   var ds = flock_mapsGetDS();
  182.   var container = ds.getNode("urn:flock:maps:addresses");
  183.   var allAddresses = [];
  184.   var localeService = Components.classes["@mozilla.org/intl/nslocaleservice;1"].getService(Components.interfaces.nsILocaleService);
  185.   var stringBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService);
  186.   var stringBundle = stringBundleService.createBundle("chrome://minimap/content/locale/maps.properties", localeService.getApplicationLocale());
  187.   var nodes = container.getChildren();
  188.   while ( nodes.hasMoreElements() ) {
  189.     var node = nodes.getNext(); 
  190.     var index = "";
  191.     var url = "";
  192.     var address = "";
  193.     var title = "";
  194.     var desc = "";
  195.     var lat = "";
  196.     var lng = "";
  197.     if (node.getTarget(_mns('indexlabel')))
  198.         index = node.getTarget(_mns('indexlabel')).getValue();
  199.     if (node.getTarget(_mns('location')))
  200.         address = node.getTarget(_mns('location')).getValue();
  201.     if (node.getTarget(_mns('title')))
  202.         title = node.getTarget(_mns('title')).getValue();
  203.     if (node.getTarget(_mns('sourceurl')))
  204.         url = node.getTarget(_mns('sourceurl')).getValue();
  205.     if (node.getTarget(_mns('description')))
  206.         desc = node.getTarget(_mns('description')).getValue();
  207.     if (node.getTarget(_mns('lat')))
  208.         lat = parseFloat(node.getTarget(_mns('lat')).getValue());
  209.     if (node.getTarget(_mns('lng')))
  210.         lng = parseFloat(node.getTarget(_mns('lng')).getValue());
  211.     if (url) {
  212.         var body = "<a target=\"_blank\" style=\"font-weight:bold; text-decoration: underline; color: blue;\" href=\""+url+"\">"+title+"</a>";
  213.     } 
  214.     else {
  215.       var body = "<b>"+title+"</b>";
  216.     }
  217.     body += "<br/><i>"+address+"</i><br/>"+
  218.             "<p>"+desc+"<br/>"+
  219.             "<div style=\"text-align: right; font-size: 10px; color: blue; text-decoration: underline; padding: 0; margin: 2px 0 0 0;\"><a target='_blank' href='http://maps.google.com/maps?addr=&daddr="+encodeURI(address)+"'>Directions to/from Google</a></div></p>";
  220.    allAddresses.push( {title: index, body: body, lat:lat, lng:lng} )
  221.    }
  222.    if(allAddresses.length == 0){
  223.         $('maps-deck').setAttribute('selectedIndex','0');
  224.   } else {
  225.         $('maps-deck').setAttribute('selectedIndex','1');
  226.   }
  227.     minimapBrowserScope().updateNodes( allAddresses );
  228. }
  229.  
  230. function maps_keypress( event ) {
  231.   if ((event.keyCode == 8)||(event.keyCode == 46)) {
  232.     delete_address();
  233.   }
  234. }
  235.  
  236. function show() {
  237.   try{
  238.   var tree = $('address_list');
  239.   var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  240.   var item = treeSelection[0];
  241.   var rdfId = item["idCol"];
  242.   var ds = flock_mapsGetDS();
  243.   var node = ds.getNode( rdfId );
  244.   var lat = parseFloat(node.getTarget(_mns('lat')).getValue());
  245.   var lng = parseFloat(node.getTarget(_mns('lng')).getValue());
  246.     minimapBrowserScope().gotoLatLng( lat, lng );
  247.   }
  248.   catch(err){}
  249. }
  250.  
  251. function showSel(id){
  252.     aTree = $('address_list');
  253.     aCols = 'idCol';
  254.     var z = addressCount();
  255.     for (var i = 0; i < z; ++i) {
  256.     var col = aTree.columns.getNamedColumn(aCols);
  257.     var t = aTree.view.getCellText(i, col);
  258. if(id == t){
  259. //var boxobject = aTree.boxObject;
  260. //boxobject.QueryInterface(Components.interfaces.nsITreeBoxObject);
  261. //boxobject.scrollToRow(i);
  262. aTree.view.selection.select(i);
  263. }
  264. }
  265. }
  266.  
  267. function delete_address() {
  268.   var ds = flock_mapsGetDS();
  269.   var container = ds.getNode("urn:flock:maps:addresses");
  270.   var tree = $('address_list');
  271.   var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  272.   for (var i = 0; i < treeSelection.length; ++i) {
  273.     var item = treeSelection[i];
  274.     var objectId = item["idCol"];
  275.     var node = ds.getNode(objectId);
  276.     ds.deleteRecursive(node);
  277.     container.removeChild(node);
  278.   }
  279.     ds.save();
  280.     rebuildMap( )
  281. }
  282.  
  283. function edit_address(){ 
  284.     var tree = $('address_list');
  285.     var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  286.     var item = treeSelection[0];
  287.     var objectId = item["idCol"];
  288.     window.openDialog("chrome://minimap/content/editAddressDlg.xul", "editAddress", "modal, centerscreen", objectId);
  289.     rebuildMap( )
  290. }
  291.  
  292. function createLink(rdfId){
  293.   var ds = flock_mapsGetDS();
  294.   var node = ds.getNode( rdfId );
  295.   var result = node.getTarget(_mns('sourceurl')).getValue();  
  296.   return result;
  297. }
  298.  
  299. function add_object(data){
  300.     try{
  301.         var ds = flock_mapsGetDS();
  302.         var container = ds.getNode("urn:flock:maps:addresses");
  303.         var date=new Date();
  304.  
  305.         var id='obj_' + date.getTime();
  306.  
  307.         var root = ds.getNode("urn:flock:maps:addresses");
  308.         var node = ds.getNode("urn:flock:maps:addresses:" + id);
  309.         node.addTargetOnce(_mns('id'), "urn:flock:maps:addresses:" + id );
  310.         node.addTargetOnce(_mns('sourceurl'), data.sourceurl + "" );
  311.         node.addTargetOnce(_mns('location'), data.address + "");
  312.         node.addTargetOnce(_mns('indexlabel'), data.indexlabel +"");
  313.         node.addTargetOnce(_mns('lat'), data.lat + "" );
  314.         node.addTargetOnce(_mns('lng'), data.lng + "" );
  315.         node.addTargetOnce(_mns('title'), data.title + "" );
  316.         node.addTargetOnce(_mns('description'), (data.description || "") );
  317.         node.addTargetOnce(_mns('accuracy'), data.accuracy + "" );
  318.         node.addTargetOnce(_mns('country'), (data.country || "") );
  319.         node.addTargetOnce(_mns('state'), (data.state || "") );
  320.         node.addTargetOnce(_mns('county'), (data.county || "") );
  321.         node.addTargetOnce(_mns('locality'), (data.locality || "") );
  322.         node.addTargetOnce(_mns('postal'), (data.postal || "") );
  323.         node.addTargetOnce(_mns('street'), (data.street || "") );
  324.         node.addTargetOnce(_mns('altd'), (data.altd || "") );
  325.         root.addChild(node);
  326.         ds.save();  
  327.     rebuildMap( )
  328.         show('urn:flock:maps:addresses:'+id);
  329.         showSel('urn:flock:maps:addresses:'+id);
  330.  
  331.     }
  332.     catch(e){
  333.     }
  334. }
  335.  
  336. // ####################### end of main datasource code #########
  337.  
  338. // ********************* drag and drop code *******************
  339.  
  340. var mapsObserver={
  341.  
  342.      onDragOver: function(event,flavor,session){
  343.      },
  344.  
  345.      onDrop: function(evt,dropData,asession){
  346.             var data = flock_getMarkedUpSelection(evt, dropData, asession); 
  347.             var title = content.document.title;
  348.             gTitle = title;
  349.             try{
  350.             gUrl = content.document.location;
  351.             if (gUrl == "about:blank")
  352.             gUrl = "";
  353.             }
  354.             catch(err){
  355.           gUrl = "";
  356.             }
  357.             gDescription = "";
  358.         // switch(data.type){ // doesn't seem to work
  359.              // case "link": add_link(data);break; // doesn't seem to work
  360.              // case "document": // doesn't seem to work
  361.             var datalabel = data.label.toString();
  362.             datalabel = datalabel.replace( /[\r\n>]/g, ' ' );
  363.             //datalabel = datalabel.replace('google map','');
  364.             //datalabel = datalabel.replace('yahoo map','');
  365.             //if (datalabel.match('.kml')){
  366.             //var kml = datalabel.split('.kml')[0];
  367.             //kml = kml + ".kml";
  368.             //extAddXml(kml);
  369.              // }
  370.             if (datalabel.match('.kmz') || datalabel.match('.kml') || datalabel.match('=kml') || datalabel.match('bbs.keyhole.com') || datalabel.match('http://maps.google.com/maps/ms') || datalabel.match('.rss') || datalabel.match('.georss') || datalabel.match('=georss') || datalabel.match('=rss')){
  371.         var datalabel = datalabel.split(' ')[0];
  372.             extAddXml(datalabel);
  373.             }
  374.             else if (datalabel.match('maps.google') || datalabel.match('maps.yahoo') || datalabel.match('maps.live') ){
  375.                 datalabel = datalabel.split(' ')[0];
  376.                 addressParse(datalabel);       
  377.                 gGeocodeType = 'add';
  378.                 geocode();
  379.             }
  380.             else if (datalabel.match('googlesightseeing.com')) {
  381.               address = datalabel.replace( /[\r\n>]/g, ' ' );
  382.               encodedAddress = encodeURI(address);
  383.               gAddress = encodedAddress;
  384.                   if (gPrefs.getBoolPref("extensions.gmaps.gsspref")== true) {
  385.                   gsAddress = encodedAddress.split('&ll=')[1];
  386.                   gsAddressB = gsAddress.split('&')[0];
  387.                   var data = {};
  388.                   data.lat = gsAddressB.split(',')[0];
  389.                   data.lng = gsAddressB.split(',')[1];
  390.                     minimapBrowserScope().gotoLatLngGss( data.lat, data.lng ); 
  391.                   }
  392.                   else {
  393.                   gsAddress = encodedAddress.split('&ll=')[1];
  394.                   gsAddressB = gsAddress.split('&')[0];
  395.                   gsTitle = encodedAddress.split('%0A')[1];
  396.                   gsTitleB = gsTitle.replace(/%20/g, ' ');
  397.                   var data = {};
  398.                   data.lat = gsAddressB.split(',')[0];
  399.                   data.lng = gsAddressB.split(',')[1];
  400.                   data.address = gsAddressB;
  401.                   data.title = "GSS: " + gsTitleB;
  402.                   data.sourceurl = gAddress;
  403.                   data.indexlabel = addressCount()+1;
  404.                   data.indexlabel = data.indexlabel.toString();
  405.                   data.accuracy = "8";
  406.                   add_object(data); 
  407.                   minimapBrowserScope().gotoLatLngGss( data.lat, data.lng );
  408.                   }
  409.               }
  410.             else{
  411.                 if (evt.shiftKey){
  412.                 gAddressB = datalabel;
  413.                 addressParse(datalabel);       
  414.                 gGeocodeType = 'drop';
  415.                 geocode();
  416.                 }
  417.                 if (evt.ctrlKey){
  418.                   var append = gPrefs.getCharPref("extensions.gmaps.append.address");
  419.             gAddressB = datalabel + " " + append;
  420.                 addressParse(datalabel + " " + append);       
  421.                 gGeocodeType = 'add';
  422.                 geocode();
  423.                 }
  424.                 else {
  425.                 gAddressB = datalabel;
  426.                 addressParse(datalabel);       
  427.                 gGeocodeType = 'add';
  428.                 geocode();
  429.                 }
  430.     
  431.          }
  432.                     // break;
  433.             // }
  434.      },
  435.  
  436.      onDragStart: function(event, transferData, action){
  437.             dump('Drag started!');
  438.  
  439.             transferData.data=new TransferData();
  440.             transferData.data.addDataForFlavour("text/html",'html');
  441.             transferData.data.addDataForFlavour("text/x-moz-url",'url');
  442.             transferData.data.addDataForFlavour("text/unicode",'unicode');
  443.             transferData.data.addDataForFlavour("application/x-moz-file",'file');
  444.      },
  445.  
  446.      getSupportedFlavours: function(){
  447.             flavors=new FlavourSet();
  448.             flavors.appendFlavour('text/unicode');
  449.             flavors.appendFlavour('text/html');
  450.             flavors.appendFlavour('text/x-moz-url');
  451.             flavors.appendFlavour('application/x-moz-file','nsIFile');
  452.             return flavors;
  453.      }
  454. }
  455.  
  456.  
  457. function addressParse(address) {
  458.   address = address.replace( /[\r\n>]/g, ' ' );
  459.   encodedAddress = encodeURI(address);
  460.   gAddress = encodedAddress;
  461.   if (encodedAddress.match('maps.live')) {
  462.       var query = encodedAddress;
  463.         var pairs = query.split("&");
  464.         for (var i=0; i<pairs.length; i++) {
  465.         var pos = pairs[i].indexOf("=");
  466.         var argname = pairs[i].substring(0,pos).toLowerCase();
  467.         var value = pairs[i].substring(pos+1);
  468.         if (argname == "where1") {var loc = value;}
  469.         if (argname == "cp") {var loc = value;}
  470.         }
  471.       loc = loc.replace(/~/gi,',');
  472.       encodedAddress = loc;
  473.       gAddress = encodedAddress;
  474.       gAddressB = encodedAddress;
  475.     }
  476.   if (encodedAddress.match('maps.yahoo')) {
  477.     if (encodedAddress.match('lat=')) {
  478.         var query = encodedAddress;
  479.         var pairs = query.split("&");
  480.         for (var i=0; i<pairs.length; i++) {
  481.         var pos = pairs[i].indexOf("=");
  482.         var argname = pairs[i].substring(0,pos).toLowerCase();
  483.         var value = pairs[i].substring(pos+1);
  484.         if (argname == "lat") {var lat = value;}
  485.         if (argname == "lon") {var lon = value;}
  486.       }
  487.       encodedAddress = lat + ',' + lon;
  488.       gAddress = encodedAddress;
  489.       gAddressB = encodedAddress;
  490.       }
  491.     else{
  492.       encodedAddress = encodedAddress.split('?addr=')[1];
  493.       encodedAddress = encodedAddress.split('%0A')[0];
  494.       encodedAddress = encodedAddress.replace( /\+at\+.*&csz=/gi, ', ');
  495.       encodedAddress = encodedAddress.replace( /&csz=/gi, ', ');
  496.       encodedAddress = encodedAddress.replace( /&country=/gi, ', ');
  497.       encodedAddress = encodedAddress.replace( /\+/g, ' ');
  498.       gAddress = encodedAddress;
  499.       gAddressB = encodedAddress;
  500.      } 
  501.   }
  502.   if (encodedAddress.match('maps.google')) {
  503.     encodedAddress = encodedAddress.replace(/loc%3A/,'') // sometimes there is a 'loc:' in the query
  504.     encodedAddress = encodedAddress.replace(/loc%/,'') // sometimes there is a 'loc:' in the query
  505.     encodedAddress = encodedAddress.replace(/253A/,'') // sometimes there is a '253A:' in the query
  506.  
  507.     if (encodedAddress.match('q=')){   
  508.     encodedAddress = encodedAddress.split('?q=')[1];
  509.     }
  510.     if (encodedAddress.match('addr=')){   
  511.     encodedAddress = encodedAddress.split('?addr=')[1];
  512.     }
  513.     if (encodedAddress.match('%0A')){
  514.     encodedAddress = encodedAddress.split('%0A')[0];
  515.     }
  516.     if (encodedAddress.match('%2540')){
  517.     encodedAddress = encodedAddress.split('%2540')[0];
  518.     }
  519.     if (encodedAddress.match(/\(/)){
  520.     encodedAddressb = encodedAddress.split('(')[0];
  521.     encodedAddressc = encodedAddress.split(')')[1];
  522.     encodedAddress = encodedAddressb+encodedAddressc;
  523.     }
  524.     if (encodedAddress.match('ll=')){   
  525.     encodedAddress = encodedAddress.split('?ll=')[1];
  526.     }
  527.     if (encodedAddress.match('spn=')){   
  528.     encodedAddress = encodedAddress.split('spn=')[0];
  529.     }
  530.     encodedAddress = encodedAddress.replace( /\+/g, ' ');
  531.     gAddress = encodedAddress;
  532.     gAddressB = encodedAddress;
  533.   }
  534. }
  535.  
  536. // ################ end of drag and drop code #################
  537.  
  538. // ********************* edit address dialog code ****************************
  539.  
  540. function fillFields() {
  541.    if (window.arguments) {
  542.       addressId = window.arguments;
  543.       var ds = flock_mapsGetDS();
  544.       var node = ds.getNode( addressId );
  545.  
  546.       $('address-address').value = node.getTarget(_mns('location')).getValue();
  547.       $('address-title').value = node.getTarget(_mns('title')).getValue();
  548.       $('address-url').value = node.getTarget(_mns('sourceurl')).getValue();
  549.       $('address-description').value = node.getTarget(_mns('description')).getValue();
  550.     $('address-accuracy').value = node.getTarget(_mns('accuracy')).getValue();
  551.     var lat = node.getTarget(_mns('lat')).getValue();
  552.     var lng = node.getTarget(_mns('lng')).getValue();
  553.     $('drag-maps-minibrowser').contentWindow.webSetHome(lat, lng);
  554.    }
  555. }
  556.  
  557. function saveAddress() {
  558.    addressId = window.arguments;
  559.    var m = $('drag-maps-minibrowser').contentWindow.webGetLatLng();
  560.    var lat = parseFloat(m.lat);
  561.    var lng = parseFloat(m.lng);
  562.    var ds = flock_mapsGetDS();
  563.    var root = ds.getNode("urn:flock:maps:addresses");
  564.    var node = ds.getNode( addressId );
  565.  
  566.    node.addTargetOnce(_mns('location'), $('address-address').value);
  567.    node.addTargetOnce(_mns('title'), $('address-title').value);
  568.    node.addTargetOnce(_mns('sourceurl'), $('address-url').value);
  569.    node.addTargetOnce(_mns('description'), $('address-description').value);
  570.    node.addTargetOnce(_mns('accuracy'), $('address-accuracy').value);
  571.    node.addTargetOnce(_mns('lat'), lat + "" );
  572.    node.addTargetOnce(_mns('lng'), lng + "" );
  573.    if (root.getChildIndex(node) == -1){
  574.       root.addChild(node);
  575.    }
  576.    ds.save();  
  577. }
  578.  
  579. // ###################### end of edit address dialog code ########
  580.  
  581. // ******************* geocode code **********************
  582. // --------- google geocoder---------------------
  583.  
  584. function geocode() {
  585.     $('maps-deck').selectedIndex = "2";
  586.     var address = gAddress;
  587.     var domain = gPrefs.getCharPref("extensions.gmaps.domain");
  588.     req = new XMLHttpRequest ();   
  589.     req.onreadystatechange = getMapsResponse; 
  590.     req.open("GET","http://"+domain+"/maps/geo?q="+address+"&output=json&key=ABQIAAAAYgWXR5db6m93gnVrMsuXtxQncSHX4Q3-Ab3FozCaoQoCHwys1RTHg7pQTMlWwiL_zaU6tQ386P4zMw",true);
  591.     req.send(null);
  592. }
  593.  
  594. function getMapsResponse(){
  595.   if (req.readyState == 4) { 
  596.     if (req.status == 200) 
  597.     { 
  598.     $('maps-deck').selectedIndex = "1";
  599.     var results = JSON.parse(req.responseText);
  600.     var code = results.Status.code;
  601.     if (code == "200"){
  602.     if (results.Placemark.length == 1){
  603.     var placemark = results.Placemark[0];
  604.     var lat = placemark.Point.coordinates[1];
  605.     var lng = placemark.Point.coordinates[0];
  606.     var atld = placemark.Point.coordinates[2];
  607.     var structAdd = placemark.address;
  608.     var accuracy = placemark.AddressDetails.Accuracy;
  609.     try{var country = placemark.AddressDetails.Country.CountryNameCode;}catch(e){var country = '';};
  610.     try{var state = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;}catch(e){var state = '';};
  611.     try{var county = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;}catch(e){var county = '';};
  612.     try{var locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;}catch(e){var locality = '';};
  613.     try{var postal = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;}catch(e){var postal = '';}
  614.     try{var street = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;}catch(e){var street = '';};
  615.     if (gGeocodeType == 'pan'){
  616.       minimapBrowserScope().gotoLatLng(lat,lng);
  617.     }
  618.     if (gGeocodeType == 'drop'){
  619.       var body = gTitle+"<br /><i>"+structAdd+"</i>";
  620.         minimapBrowserScope().addItGeoDis(lat,lng,gTitle,body);
  621.     }
  622.     if (gGeocodeType == 'add'){
  623.     var data = {};
  624.     data.lat = lat;
  625.     data.lng = lng;
  626.     data.accuracy = accuracy;
  627.     data.address = gAddressB;
  628.     data.title = gTitle;
  629.     data.sourceurl = gUrl;
  630.     data.description = gDescription;
  631.     data.country = country;
  632.     data.state = state;
  633.     data.county = county;
  634.     data.locality = locality;
  635.     data.postal = postal;
  636.     data.street = street;
  637.     data.altd = altd;
  638.     data.indexlabel = addressCount()+1;
  639.     data.indexlabel = data.indexlabel.toString();
  640.     add_object(data); 
  641.       minimapBrowserScope().gotoLatLng(lat,lng);
  642.     }
  643.     } // end one result if
  644.     else{
  645.         $('maps-deck').selectedIndex = "1";
  646.         var geoList = $('multiaddress-list');
  647.         geoList.setAttribute('hidden',false);
  648.         var mapDeck = $('maps-deck');
  649.         mapDeck.setAttribute('hidden',true);
  650.     for (var i = 0; i <= results.Placemark.length - 1; i++){
  651.     var placemark = results.Placemark[i];
  652.     var lat = placemark.Point.coordinates[1];
  653.     var lng = placemark.Point.coordinates[0];
  654.     var altd = placemark.Point.coordinates[2];
  655.     var structAdd = placemark.address;
  656.     var accuracy = placemark.AddressDetails.Accuracy;
  657.     try{var country = placemark.AddressDetails.Country.CountryNameCode;}catch(e){var country = '';};
  658.     try{var state = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;}catch(e){var state = '';};
  659.     try{var county = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;}catch(e){var county = '';};
  660.     try{var locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;}catch(e){var locality = '';};
  661.     try{var postal = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;}catch(e){var postal = '';};
  662.     try{var street = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;}catch(e){var street = '';};
  663.     var coords = lat + ',' + lng;
  664.     var listitem = document.createElement('listitem');
  665.     listitem.setAttribute('label',structAdd);
  666.     listitem.setAttribute('value',coords);
  667.     listitem.setAttribute('title',structAdd);
  668.     listitem.setAttribute('accuracy',accuracy);
  669.     listitem.setAttribute('description',gDescription);
  670.     listitem.setAttribute('url',gUrl);
  671.     listitem.setAttribute('country',country);
  672.     listitem.setAttribute('state',state);
  673.     listitem.setAttribute('county',county);
  674.     listitem.setAttribute('locality',locality);
  675.     listitem.setAttribute('postal',postal);
  676.     listitem.setAttribute('street',street);
  677.     listitem.setAttribute('altd',altd);
  678.     geoList.appendChild(listitem);
  679.     } // for
  680.     } // end more than one else
  681.     } // end code 200
  682.     if (code != "200"){ 
  683.     pipesGeocode();
  684.     }
  685.    } 
  686.   } 
  687. }
  688.  
  689. // -------------- pipes json geocoder --------------------
  690.  
  691. function pipesGeocode(){
  692.   var address = gAddress;
  693.   req = new XMLHttpRequest ();
  694.   req.onreadystatechange = getaddressPipesResponse;
  695.   req.open("GET","http://pipes.yahoo.com/pipes/pipe.run?_id=qudHFl3z2xGTWsmGnkartA&_render=json&_run=1&location="+address,true);
  696.   req.send(null);
  697. }
  698.  
  699. function getaddressPipesResponse(){
  700.  if (req.readyState == 4) {
  701.   if (req.status == 200)
  702.   {
  703.     $('maps-deck').selectedIndex = "1";
  704.     var results = JSON.parse(req.responseText);
  705.     var resultset = results.value.items[0];
  706.     var lat = resultset.lat; //eg returns "56.575849"
  707.     var lng = resultset.lon; //eg returns "-3.231635"
  708.     var accuracy = resultset.quality; //eg returns "40"
  709.     try{var country = resultset.country;}catch(e){var country = '';}
  710.     try{var state = resultset.state;}catch(e){var state = '';}
  711.     try{var locality = resultset.city;}catch(e){var locality = '';}
  712.     try{var postal = resultset.postal;}catch(e){var postal = '';}
  713.     try{var street = resultset.street;}catch(e){var street = '';}
  714.     if (!postal) postal = '';    
  715.     if (gGeocodeType == 'pan'){
  716.     if (lat != '')
  717.      minimapBrowserScope().gotoLatLng(lat,lng);
  718.     }
  719.     if (gGeocodeType == 'drop'){
  720.     if (lat != ''){
  721.       var body = gTitle+"<br /><i>"+gAddressB+"</i>";
  722.         minimapBrowserScope().addItGeoDis(lat,lng,gTitle,body);
  723.     }
  724.     }
  725.     if (gGeocodeType == 'add'){
  726.     if (lat != ''){
  727.         var data = {};
  728.     data.lat = lat;
  729.     data.lng = lng;
  730.     data.accuracy = accuracy;
  731.     data.address = gAddressB;
  732.     data.title = gTitle;
  733.     data.sourceurl = gUrl;
  734.     data.description = gDescription;
  735.     data.country = country;
  736.     data.state = state;
  737.     data.locality = locality;
  738.     data.postal = postal;
  739.     data.street = street;
  740.     data.indexlabel = addressCount()+1;
  741.     data.indexlabel = data.indexlabel.toString();
  742.     add_object(data); 
  743.       minimapBrowserScope().gotoLatLng(lat,lng);
  744.     }
  745.     }
  746.   }
  747.     else{
  748.       $('maps-deck').selectedIndex = "1";
  749.     }
  750.  }
  751. }
  752.  
  753.  
  754. // ################### end of geocode code #####################
  755.  
  756.  
  757. // ********************** tools code **************************
  758. // ------------ address list context code ---------------------
  759.  
  760. function setMapHome() {
  761.   var ds = flock_mapsGetDS();
  762.   var container = ds.getNode("urn:flock:maps:addresses");
  763.   var tree = $('address_list');
  764.   var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  765.   for (var i = 0; i < treeSelection.length; ++i) {
  766.     var item = treeSelection[i];
  767.     var objectId = item["idCol"];
  768.     var node = ds.getNode(objectId);
  769.     var lat = node.getTarget(_mns('lat')).getValue();
  770.     var lng = node.getTarget(_mns('lng')).getValue();
  771.     gPrefs.setCharPref("extensions.gmaps.mapHomeLat", lat);
  772.     gPrefs.setCharPref("extensions.gmaps.mapHomeLon", lng);
  773.   }
  774. }
  775.  
  776. function setStartAddress() {
  777.   var ds = flock_mapsGetDS();
  778.   var container = ds.getNode("urn:flock:maps:addresses");
  779.   var tree = $('address_list');
  780.   var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  781.   for (var i = 0; i < treeSelection.length; ++i) {
  782.     var item = treeSelection[i];
  783.     var objectId = item["idCol"];
  784.     var node = ds.getNode(objectId);
  785.     var loc = node.getTarget(_mns('location')).getValue();
  786.     var lat = node.getTarget(_mns('lat')).getValue();
  787.     var lng = node.getTarget(_mns('lng')).getValue();
  788.     gPrefs.setCharPref("extensions.gmaps.startprefnew", loc);
  789.     gPrefs.setCharPref("extensions.gmaps.startpreflat", lat);
  790.     gPrefs.setCharPref("extensions.gmaps.startpreflng", lng);
  791.   }
  792. }
  793.  
  794.  
  795. function openAddressService(service){
  796.   var startaddress = gPrefs.getCharPref("extensions.gmaps.startprefnew");
  797.   var domain = gPrefs.getCharPref("extensions.gmaps.domain");
  798.   var ydomain = gPrefs.getCharPref("extensions.gmaps.ydomain");
  799.   var ds = flock_mapsGetDS();
  800.   var container = ds.getNode("urn:flock:maps:addresses");
  801.   var tree = $('address_list');
  802.   var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  803.   
  804.   for (var i = 0; i < treeSelection.length; ++i) {
  805.   var item = treeSelection[i];
  806.   var objectId = item["idCol"];
  807.   var node = ds.getNode(objectId);
  808.   var nodelat = node.getTarget(_mns('lat')).getValue();
  809.   var nodelng = node.getTarget(_mns('lng')).getValue();
  810.   var nodeurl = node.getTarget(_mns('sourceurl')).getValue();
  811.   var nodetitle = node.getTarget(_mns('title')).getValue();
  812.   var nodeaddress = node.getTarget(_mns('location')).getValue();
  813.   var nodedescription = node.getTarget(_mns('description')).getValue();
  814.   var url = switchService(service,domain,ydomain,startaddress,nodelat,nodelng,nodeurl,nodetitle,nodeaddress,nodedescription);
  815.   var newTab = mainWindow.getBrowser().addTab(url);
  816.   mainWindow.getBrowser().selectedTab = newTab;
  817.   }
  818.  
  819. }
  820.  
  821.  
  822. function aboutAccuracy() {
  823.   window.openDialog("chrome://minimap/content/aboutaccuracy.xul", "aboutaccuracy", "modal, centerscreen");
  824. }
  825.  
  826. function myOptions() {
  827.   window.open("chrome://minimap/content/mapsprefs.xul", "preferences", "chrome, centerscreen");
  828. }
  829.  
  830. // ------------ toolbarbutton code ---------------------
  831.  
  832. function extPanAdd() {
  833.     var promptMsg = minimapperstrings.GetStringFromName("address.prompt.prompt");
  834.     var addMsg = minimapperstrings.GetStringFromName("address.prompt.address");
  835.     var gadd = prompt(promptMsg,addMsg);
  836.     if (gadd){
  837.     gAddress = encodeURIComponent(gadd);
  838.     gGeocodeType = 'pan';
  839.     geocode();
  840.     }
  841. }
  842.  
  843. function add_from_input(){
  844.   var params = {
  845.       title: "",
  846.       address: "",
  847.       url: "",
  848.       description: "",
  849.       cancelled: false
  850.       };
  851.   window.openDialog("chrome://minimap/content/addAddressDlg.xul", "_blank", "modal,centerscreen", params);
  852. if (!params.cancelled){
  853.   gAddress = encodeURIComponent(params.address);
  854.   gAddressB = params.address;
  855.   gTitle = params.title;
  856.   gUrl = params.url;
  857.   gDescription = params.description;
  858.     gGeocodeType = 'add';
  859.     geocode();
  860. }
  861. }
  862.  
  863. function extAddCrosshair() {
  864.   var center =   minimapBrowserScope().webGetCenter();
  865.   var glat = center.lat;
  866.   var glon = center.lng;
  867.   var params = {
  868.       title: "Coordinate",
  869.       address: center.lat +","+center.lng,
  870.       url: "http://maps.google.com/maps?q="+center.lat +","+center.lng,
  871.       description: "",
  872.       cancelled: false
  873.       };
  874.   window.openDialog("chrome://minimap/content/addAddressDlg.xul", "_blank", "modal,centerscreen", params);
  875.  
  876. if (!params.cancelled){
  877.     var data = {};
  878.      data.lat = glat;
  879.      data.lng = glon;
  880.      data.address = params.address;
  881.      data.title = params.title;
  882.      data.sourceurl = params.url;
  883.      data.description = params.description;
  884.      data.indexlabel = addressCount()+1;
  885.      data.indexlabel = data.indexlabel.toString();
  886.      data.accuracy = "8";
  887.    add_object(data);
  888. }
  889. }
  890.  
  891. function extMapHome() {
  892.   var homeLat = gPrefs.getCharPref("extensions.gmaps.mapHomeLat");
  893.   var homeLon = gPrefs.getCharPref("extensions.gmaps.mapHomeLon");
  894.   minimapBrowserScope().gotoLatLng(homeLat,homeLon);
  895. }
  896.  
  897.  
  898.  
  899. function extZoomIn() {
  900.     minimapBrowserScope().webZoomIn();
  901. }
  902.  
  903. function extZoomOut() {
  904.     minimapBrowserScope().webZoomOut();
  905. }
  906.  
  907. function extZoomInPlus() {
  908.     minimapBrowserScope().webZoomInPlus();
  909. }
  910.  
  911. function extZoomOutPlus() {
  912.     minimapBrowserScope().webZoomOutPlus();
  913. }
  914.  
  915. function extMapType(type) {
  916.   if(type == "Map")
  917.     minimapBrowserScope().webMapMapType();
  918.   if(type == "Satellite")
  919.     minimapBrowserScope().webSatMapType();
  920.   if(type == "Hybrid")
  921.     minimapBrowserScope().webHybMapType();
  922.   if(type == "Terrain")
  923.     minimapBrowserScope().webTerMapType();
  924.   if(type == "Earth")
  925.     minimapBrowserScope().webEarMapType();
  926.   gPrefs.setCharPref("extensions.gmaps.start.maptype", type);
  927. }
  928.  
  929. function extTrafficToggle(){
  930.     minimapBrowserScope().webTrafficToggle();
  931. }
  932.  
  933. function extDragZoom(){
  934.     minimapBrowserScope().webDragZoom();
  935. }
  936.  
  937. function extUndo(){
  938.     minimapBrowserScope().webUndo();
  939. }
  940.  
  941. // ################## end of tools code ######################
  942.  
  943. // ***************** directions mode **************************
  944.  
  945. function directionsSetPathway() {
  946.     var defaultMsg = minimapperstrings.GetStringFromName("directions.list.default");
  947.     var dirService = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties);
  948.     var profileDir = dirService.get('ProfD', Components.interfaces.nsILocalFile);
  949.     pathway = "file://"+profileDir.path+"/flock_maps.rdf";
  950.     pathway = pathway.replace(/ /g,'%20');
  951.     var startaddress = gPrefs.getCharPref("extensions.gmaps.startprefnew");
  952.     $('directions-from-list').setAttribute('datasources',pathway);
  953.     $('directions-from-list').setAttribute('ref','urn:flock:maps:addresses');
  954.     $('directions-to-list').setAttribute('datasources',pathway);
  955.     $('directions-to-list').setAttribute('ref','urn:flock:maps:addresses');
  956.     $('directions-from-list-default').setAttribute('value',startaddress);
  957.     $('directions-from-list-default').setAttribute('label',defaultMsg+startaddress);
  958.     $('directions-to-list-default').setAttribute('value',startaddress);
  959.     $('directions-to-list-default').setAttribute('label',defaultMsg+startaddress);
  960. }
  961.  
  962. function directionsDo(action){
  963.     var directionsFrom = $('directions-from-textbox').value;
  964.     var directionsTo = $('directions-to-textbox').value;
  965.     var domain = gPrefs.getCharPref("extensions.gmaps.domain");
  966.     var ydomain = gPrefs.getCharPref("extensions.gmaps.ydomain");
  967.     var email = "http://"+domain+"/maps?saddr="+encodeURIComponent(directionsFrom)+"&daddr="+encodeURIComponent(directionsTo);
  968.  
  969.     if (action == 'preview'){
  970.       minimapBrowserScope().webGetDirections(directionsFrom,directionsTo);
  971.     }
  972.     else if (action == 'share'){
  973.         var linkMsg = minimapperstrings.GetStringFromName("firefox.maps.link");
  974.         prompt(linkMsg,"http://"+domain+"/maps?saddr="+directionsFrom+"&daddr="+directionsTo);
  975.     }
  976.     else if (action == 'email'){
  977.     location.href = "mailto:?body="+encodeURIComponent(email);
  978.     }
  979.     else {
  980.         var url = action;
  981.         switch (url) {
  982.           case "google":
  983.             url = "http://"+domain+"/maps?saddr="+directionsFrom+"&daddr="+directionsTo;
  984.           break;
  985.           case "yahoo":
  986.             url = "http://"+ydomain+"/dd?taddr="+directionsTo+"&addr="+directionsFrom;
  987.           break;
  988.           case "microsoft":
  989.             url = "http://local.live.com/default.aspx?rtp=adr."+directionsFrom+"~adr."+directionsTo;    
  990.           break;
  991.         }
  992.       var newTab = mainWindow.getBrowser().addTab(url);
  993.       mainWindow.getBrowser().selectedTab = newTab;
  994.     }
  995. }
  996.  
  997. function directionsMove(rdfId){
  998.   var ds = flock_mapsGetDS();
  999.   var node = ds.getNode( rdfId );
  1000.   var lat = parseFloat(node.getTarget(_mns('lat')).getValue());
  1001.   var lng = parseFloat(node.getTarget(_mns('lng')).getValue());
  1002.     minimapBrowserScope().gotoLatLng( lat, lng );    
  1003. }
  1004.  
  1005. function previewAddressService(fromto,list){
  1006.       if (list == 'address'){
  1007.       var ds = flock_mapsGetDS();
  1008.       var container = ds.getNode("urn:flock:maps:addresses");
  1009.       var tree = $('address_list');
  1010.       var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  1011.       for (var i = 0; i < treeSelection.length; ++i) {
  1012.       var item = treeSelection[i];
  1013.       var objectId = item["idCol"];
  1014.       var node = ds.getNode(objectId);
  1015.       var nodelat = node.getTarget(_mns('lat')).getValue();
  1016.       var nodelng = node.getTarget(_mns('lng')).getValue();
  1017.       var coordsTo = nodelat + ',' +nodelng;
  1018.       }
  1019.      }
  1020.   
  1021.     var lat = gPrefs.getCharPref("extensions.gmaps.startpreflat");
  1022.     var lng = gPrefs.getCharPref("extensions.gmaps.startpreflng");
  1023.     var coordsDefault = lat + ',' +lng;    
  1024.     if (fromto == 'preview-to')
  1025.       minimapBrowserScope().webGetDirections(coordsTo,coordsDefault);
  1026.     if (fromto == 'preview-from')
  1027.       minimapBrowserScope().webGetDirections(coordsDefault,coordsTo);
  1028. }
  1029.  
  1030. // ################## end of directions mode ######################
  1031.  
  1032. // ***************** dynamic about this location menu code **************************
  1033.  
  1034. function mapsPopupShowing(){
  1035.   var amazonmenu = $('amazon');
  1036.   while (amazonmenu.firstChild)
  1037.   amazonmenu.removeChild(amazonmenu.firstChild);
  1038.  
  1039.   var ebaymenu = $('ebay');
  1040.   while (ebaymenu.firstChild)
  1041.   ebaymenu.removeChild(ebaymenu.firstChild);
  1042.  
  1043.   var mapscommenu = $('mapscom');
  1044.   while (mapscommenu.firstChild)
  1045.   mapscommenu.removeChild(mapscommenu.firstChild);
  1046.  
  1047.   var upcomingmenu = $('upcoming');
  1048.   while (upcomingmenu.firstChild)
  1049.   upcomingmenu.removeChild(upcomingmenu.firstChild);
  1050.  
  1051.   var ds = flock_mapsGetDS();
  1052.   var container = ds.getNode("urn:flock:maps:addresses");
  1053.   var tree = $('address_list');
  1054.   var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  1055.   
  1056.   for (var i = 0; i < treeSelection.length; ++i) {
  1057.   var item = treeSelection[i];
  1058.   var objectId = item["idCol"];
  1059.   var node = ds.getNode(objectId);
  1060.   var nodetitle = node.getTarget(_mns('title')).getValue();
  1061.   var nodeaddress = node.getTarget(_mns('location')).getValue();
  1062.   try{var nodecountry = node.getTarget(_mns('country')).getValue();}catch(e){var nodecountry = '';};
  1063.   try{var nodestate = node.getTarget(_mns('state')).getValue();}catch(e){var nodestate = '';};
  1064.   try{var nodecounty = node.getTarget(_mns('county')).getValue();}catch(e){var nodecounty = '';};
  1065.   try{var nodelocality = node.getTarget(_mns('locality')).getValue();}catch(e){var nodelocality = '';};
  1066.   try{var nodepostal = node.getTarget(_mns('postal')).getValue();}catch(e){var nodepostal = '';};
  1067.   }
  1068.  
  1069. var menuarray = [nodetitle,nodeaddress,nodecountry,nodestate,nodepostal,nodecounty,nodelocality];
  1070.  
  1071. for (var i = 0; i < menuarray.length; ++i) {
  1072. var arrayitem = menuarray[i];
  1073. var menuitem = document.createElement('menuitem');
  1074. menuitem.setAttribute('label',arrayitem);
  1075. menuitem.setAttribute('value',arrayitem);
  1076. menuitem.setAttribute('oncommand', 'amazonOpen(this.value);');
  1077. if (arrayitem != ''){
  1078. amazonmenu.appendChild(menuitem);
  1079. }
  1080. }
  1081.  
  1082. for (var i = 0; i < menuarray.length; ++i) {
  1083. var arrayitem = menuarray[i];
  1084. var menuitem = document.createElement('menuitem');
  1085. menuitem.setAttribute('label',arrayitem);
  1086. menuitem.setAttribute('value',arrayitem);
  1087. menuitem.setAttribute('oncommand', 'ebayOpen(this.value);');
  1088. if (arrayitem != ''){
  1089. ebaymenu.appendChild(menuitem);
  1090. }
  1091. }
  1092.  
  1093. for (var i = 0; i < menuarray.length; ++i) {
  1094. var arrayitem = menuarray[i];
  1095. var menuitem = document.createElement('menuitem');
  1096. menuitem.setAttribute('label',arrayitem);
  1097. menuitem.setAttribute('value',arrayitem);
  1098. menuitem.setAttribute('oncommand', 'mapscomOpen(this.value);');
  1099. if (arrayitem != ''){
  1100. mapscommenu.appendChild(menuitem);
  1101. }
  1102. }
  1103.  
  1104. for (var i = 0; i < menuarray.length; ++i) {
  1105. var arrayitem = menuarray[i];
  1106. var menuitem = document.createElement('menuitem');
  1107. menuitem.setAttribute('label',arrayitem);
  1108. menuitem.setAttribute('value',arrayitem);
  1109. menuitem.setAttribute('oncommand', 'upcomingOpen(this.value);');
  1110. if (arrayitem != ''){
  1111. upcomingmenu.appendChild(menuitem);
  1112. }
  1113. }
  1114.  
  1115. }
  1116.  
  1117. function amazonOpen(term){
  1118. var url = "http://www.amazon.com/gp/search?ie=UTF8&keywords="+term+"&tag=minimsideb-20&index=blended&linkCode=ur2&camp=1789&creative=9325"
  1119.   var newTab = mainWindow.getBrowser().addTab(url);
  1120.   mainWindow.getBrowser().selectedTab = newTab;
  1121. }
  1122.  
  1123. function ebayOpen(term){
  1124. var url = "http://rover.ebay.com/rover/1/711-1751-2978-71/1?AID=5463217&PID=2497462&mpre=http%3A%2F%2Fsearch-desc.ebay.com%2Fsearch%2Fsearch.dll%3Fsatitle%3D"+term
  1125.   var newTab = mainWindow.getBrowser().addTab(url);
  1126.   mainWindow.getBrowser().selectedTab = newTab;
  1127. }
  1128.  
  1129. function mapscomOpen(term){
  1130. var url = "http://www.dpbolvw.net/interactive?&sp-a=sp10030c64&sp-f=ISO-8859-1&sp-p=all&catseach=1&sp-t=dev_search&sp-q="+term+"&aid=193825&pid=2497462&url=http://promosearch.atomz.com/search/";
  1131.   var newTab = mainWindow.getBrowser().addTab(url);
  1132.   mainWindow.getBrowser().selectedTab = newTab;
  1133. }
  1134.  
  1135. function upcomingOpen(term){
  1136. var url = "http://upcoming.yahoo.com/place/?loc="+term;
  1137.   var newTab = mainWindow.getBrowser().addTab(url);
  1138.   mainWindow.getBrowser().selectedTab = newTab;
  1139. }
  1140.  
  1141. // ################## end of dynamic about this code ######################
  1142.  
  1143. // ***************** miscellaeneous **************************
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150. function multiAddressAdd(coords){
  1151.     var geoList = $('multiaddress-list');
  1152.     var title = geoList.selectedItem.getAttribute('title');
  1153.     var url = geoList.selectedItem.getAttribute('url');
  1154.     var description = geoList.selectedItem.getAttribute('description');
  1155.     var accuracy = geoList.selectedItem.getAttribute('accuracy');
  1156.     var country = geoList.selectedItem.getAttribute('country');
  1157.     var state = geoList.selectedItem.getAttribute('state');
  1158.     var county = geoList.selectedItem.getAttribute('county');
  1159.     var locality = geoList.selectedItem.getAttribute('locality');
  1160.     var postal = geoList.selectedItem.getAttribute('postal');
  1161.     var street = geoList.selectedItem.getAttribute('street');
  1162.     var altd = geoList.selectedItem.getAttribute('altd');
  1163.     var lat = coords.split(',')[0];
  1164.     var lng = coords.split(',')[1];
  1165.     var data = {};
  1166.     data.lat = lat;
  1167.     data.lng = lng;
  1168.     data.altd = altd;
  1169.     data.accuracy = accuracy;
  1170.     data.address = geoList.selectedItem.label;
  1171.     data.title = title;
  1172.     data.sourceurl = url;
  1173.     data.description = description;
  1174.     data.country = country;
  1175.     data.state = state;
  1176.     data.county = county;
  1177.     data.locality = locality;
  1178.     data.postal = postal;
  1179.     data.street = street;
  1180.     data.indexlabel = addressCount()+1;
  1181.     data.indexlabel = data.indexlabel.toString();
  1182.     add_object(data); 
  1183.     while (geoList.firstChild)
  1184.         geoList.removeChild(geoList.firstChild);
  1185.     geoList.setAttribute('hidden',true);
  1186.     var mapDeck = $('maps-deck');
  1187.     mapDeck.setAttribute('hidden',false);
  1188.       minimapBrowserScope().gotoLatLng(lat,lng);
  1189. }
  1190.  
  1191. function shareLocation(type){
  1192. var linkMsg = minimapperstrings.GetStringFromName("firefox.maps.link");
  1193.  
  1194. var ds = flock_mapsGetDS();
  1195.   var container = ds.getNode("urn:flock:maps:addresses");
  1196.   var tree = $('address_list');
  1197.   var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  1198.   for (var i = 0; i < treeSelection.length; ++i) {
  1199.   var item = treeSelection[i];
  1200.   var objectId = item["idCol"];
  1201.   var node = ds.getNode(objectId);
  1202.   var nodelat = node.getTarget(_mns('lat')).getValue();
  1203.   var nodelng = node.getTarget(_mns('lng')).getValue();
  1204.   var nodetitle = node.getTarget(_mns('title')).getValue();
  1205.   var origtitle = nodetitle;
  1206.   nodetitle = encodeURIComponent(nodetitle);
  1207.   var url = 'http://maps.stcstm.org/?lat='+nodelat+'&lng='+nodelng+'&title='+nodetitle;
  1208.   var latlng = nodelat +','+ nodelng;
  1209. var imageurl = "'http://i60.photobucket.com/albums/h6/mctones/spatial/status_but.png'";
  1210.   var html = '<a href="http://maps.google.com/maps?q='+nodelat+','+nodelng+'('+nodetitle+')" style="text-decoration: none !important;"><span style="padding: 2px 0 2px 20px; background: url('+imageurl+') left center no-repeat;"><abbr class="geo" title="'+nodelat+';'+nodelng+'">'+origtitle+'</abbr></span></a>';
  1211. if (type == 'latlng'){
  1212. prompt('Copy and Paste the following:',latlng);
  1213. }
  1214. else if (type == 'html'){
  1215. prompt('Copy and Paste the following:',html);
  1216. }
  1217. else if (type == 'email'){
  1218. location.href = 'mailto:?body='+encodeURIComponent(url);
  1219. }
  1220. else {
  1221. prompt(linkMsg,url);
  1222. }
  1223. }
  1224. }
  1225.  
  1226.  
  1227.  
  1228. // ################## end of dmiscellaeneous ######################
  1229.  
  1230. // ***************** kml/geoRss **************************
  1231.  
  1232. function addGeoXmlLayers(zoom){
  1233.         var kmlMenu = $('kml-list');
  1234.         while (kmlMenu.firstChild){
  1235.         kmlMenu.removeChild(kmlMenu.firstChild);
  1236.         }
  1237.           minimapBrowserScope().clearGeoXml();
  1238.     var ds = flock_mapsGetDS();
  1239.       var container = ds.getNode("urn:flock:maps:kml");
  1240.       var nodes = container.getChildren();
  1241.       while ( nodes.hasMoreElements() ) {
  1242.     var node = nodes.getNext(); 
  1243.     var source = "";
  1244.     var checked = "";
  1245.     var id ="";
  1246.     var title = "";
  1247.     if (node.getTarget(_mns('id')))
  1248.         id = node.getTarget(_mns('id')).getValue();
  1249.     if (node.getTarget(_mns('kmlurl')))
  1250.         source = node.getTarget(_mns('kmlurl')).getValue();
  1251.     if (node.getTarget(_mns('kmltitle')))
  1252.             title = node.getTarget(_mns('kmltitle')).getValue();
  1253.     if (node.getTarget(_mns('kmlchecked')))
  1254.             checked = node.getTarget(_mns('kmlchecked')).getValue();
  1255.      minimapBrowserScope().addGeoXML(source,checked);
  1256.    // add richlistbox items
  1257.     var menuitem = document.createElement('richlistitem');
  1258.     menuitem.setAttribute('id',id);
  1259.     menuitem.setAttribute('value',source);
  1260.     menuitem.setAttribute('style','overflow: hidden');
  1261.     menuitem.setAttribute('onclick','webGotoXmlViewport(this)');
  1262.     var checkbox = document.createElement('checkbox');
  1263.     checkbox.setAttribute('id',id);
  1264.     checkbox.setAttribute('value',source);
  1265.     checkbox.setAttribute('checked',checked);
  1266.     checkbox.setAttribute('onclick','kmlListDo(this)');
  1267.     menuitem.appendChild(checkbox);
  1268.     var label = document.createElement('label');
  1269.     label.setAttribute('value',title);
  1270.     menuitem.appendChild(label);
  1271.     kmlMenu.appendChild(menuitem);
  1272.    }
  1273. if (zoom){
  1274.   var lastitem = kmlMenu.lastChild;
  1275.   var theid = lastitem.getAttribute('value');
  1276.   minimapBrowserScope().gotoXmlViewport(theid);
  1277. }
  1278. }
  1279.  
  1280. function addGeoXmlData(kml){
  1281.         try{
  1282.             var ds = flock_mapsGetDS();
  1283.             var container = ds.getNode("urn:flock:maps:kml");
  1284.             var date=new Date();
  1285.  
  1286.             var id='obj_' + date.getTime();
  1287.  
  1288.             var root = ds.getNode("urn:flock:maps:kml");
  1289.             var node = ds.getNode("urn:flock:maps:kml:" + id);
  1290.             node.addTargetOnce(_mns('id'), "urn:flock:maps:kml:" + id );
  1291.             node.addTargetOnce(_mns('kmlurl'), kml.url + "" );
  1292.             node.addTargetOnce(_mns('kmltitle'), kml.title + "" );
  1293.             node.addTargetOnce(_mns('kmlchecked'), kml.checked + "" );
  1294.             root.addChild(node);
  1295.             ds.save(); 
  1296.         addGeoXmlLayers(true); 
  1297.         }catch(e){}
  1298. }
  1299.  
  1300. function kmlListDo(checkbox){
  1301.         var kmlid = checkbox.id;
  1302.         var value = checkbox.getAttribute('value');
  1303.         var checked = checkbox.getAttribute('checked');
  1304.         if (checked == 'true'){
  1305.         checked = 'false';
  1306.         }
  1307.         else { 
  1308.         checked = 'true';
  1309.         }
  1310.       minimapBrowserScope().webAddXml(value, checked);
  1311.     var ds = flock_mapsGetDS();
  1312.     var root = ds.getNode("urn:flock:maps:kml");
  1313.     var node = ds.getNode(kmlid);
  1314.     node.addTargetOnce(_mns('kmlchecked'), checked);
  1315.     ds.save();  
  1316. }
  1317.  
  1318. function addKmlUrlPrompt(){
  1319.     var params = {
  1320.       title: "kml link",
  1321.       url: "",
  1322.       cancelled: false
  1323.       };
  1324.   window.openDialog("chrome://minimap/content/addKmlDlg.xul", "_blank", "modal,centerscreen", params);
  1325.     if (!params.cancelled){
  1326.     var title = params.title;
  1327.     var url = params.url;
  1328.     var kml = {};
  1329.     kml.title = title;
  1330.     kml.url = url;
  1331.     kml.checked = true;
  1332.     addGeoXmlData(kml);
  1333.     }
  1334. }
  1335.  
  1336. function extAddXml(source){
  1337.     var title = content.document.title;
  1338.     var kml = {};
  1339.     kml.title = title;
  1340.     kml.url = source;
  1341.     kml.checked = true;
  1342.     addGeoXmlData(kml);
  1343. }
  1344.  
  1345. function delete_Kml() {
  1346.     minimapBrowserScope().clearGeoXml();
  1347.   var kmllist = $('kml-list').selectedItem;
  1348.   var objectId = kmllist.getAttribute('id');
  1349.   var ds = flock_mapsGetDS();
  1350.   var container = ds.getNode("urn:flock:maps:kml");
  1351.   var node = ds.getNode(objectId);
  1352.   ds.deleteRecursive(node);   
  1353.   container.removeChild(node);
  1354.   ds.save();
  1355.   addGeoXmlLayers(); 
  1356. }
  1357.  
  1358. function edit_Kml(){ 
  1359.     var kmllist = $('kml-list').selectedItem;
  1360.     var objectId = kmllist.getAttribute('id');
  1361.     var ds = flock_mapsGetDS();
  1362.     var root = ds.getNode("urn:flock:maps:kml");
  1363.     var node = ds.getNode(objectId);
  1364.     var title = node.getTarget(_mns('kmltitle')).getValue();
  1365.     var url = node.getTarget(_mns('kmlurl')).getValue();
  1366.     var params = {
  1367.       title: title,
  1368.       url: url,
  1369.       cancelled: false
  1370.       };
  1371.  
  1372.     window.openDialog("chrome://minimap/content/editKmlDlg.xul", "_blank", "modal,centerscreen", params);
  1373.     if (!params.cancelled){
  1374.     node.addTargetOnce(_mns('kmltitle'), params.title);
  1375.     node.addTargetOnce(_mns('kmlurl'), params.url);
  1376.     if (root.getChildIndex(node) == -1){
  1377.       root.addChild(node);
  1378.     }
  1379.     ds.save();
  1380.     addGeoXmlLayers(); 
  1381.     }
  1382. }
  1383.  
  1384. function googleEarthKml(){
  1385.     var kmllist = $('kml-list').selectedItem;
  1386.     var objectId = kmllist.getAttribute('id');
  1387.     var ds = flock_mapsGetDS();
  1388.     var root = ds.getNode("urn:flock:maps:kml");
  1389.     var node = ds.getNode(objectId);
  1390.     var url = node.getTarget(_mns('kmlurl')).getValue();
  1391.   var newTab = mainWindow.getBrowser().addTab(url);
  1392.   mainWindow.getBrowser().selectedTab = newTab;    
  1393. }
  1394.  
  1395. function embed_Kml(){
  1396.     var kmllist = $('kml-list').selectedItem;
  1397.     var objectId = kmllist.getAttribute('id');
  1398.     var ds = flock_mapsGetDS();
  1399.     var root = ds.getNode("urn:flock:maps:kml");
  1400.     var node = ds.getNode(objectId);
  1401.     var title = node.getTarget(_mns('kmltitle')).getValue();
  1402.     var url = node.getTarget(_mns('kmlurl')).getValue();
  1403.     var params = {
  1404.       title: title,
  1405.       url: url,
  1406.       cancelled: false
  1407.       };
  1408.  
  1409.     window.openDialog("chrome://minimap/content/embedKml.xul", "_blank", "chrome, centerscreen", params);    
  1410. }
  1411. // ################## end of kml/georss ######################
  1412.  
  1413.  
  1414. function minimapBrowserScope(){
  1415.     var src = window.location.href;
  1416.     if (src == "chrome://minimap/content/minimap.xul"){
  1417.     return $('flock-maps-minibrowser').contentWindow;
  1418.     }
  1419.     else{
  1420.     return mainWindow.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject;
  1421.     }
  1422. }
  1423.  
  1424. function webGotoXmlViewport(item){
  1425.     var source = item.getAttribute('value');
  1426.     minimapBrowserScope().gotoXmlViewport(source);
  1427. }
  1428.  
  1429. function switchMinimapTabs(deck){
  1430.     $('minimap-deck').selectedIndex = deck;
  1431. }
  1432.  
  1433. function minimapOpenUrl(url){
  1434.     switch (url) {
  1435.       case "help":
  1436.       url = "http://minimap.spatialviews.com/index.php?option=com_content&view=article&id=35&Itemid=2";
  1437.       break;
  1438.       case "home":
  1439.       url = "http://minimap.spatialviews.com";
  1440.       break;
  1441.       case "release":
  1442.       url = "http://minimap.spatialviews.com/index.php?option=com_content&view=category&layout=blog&id=19&Itemid=58";
  1443.       break;
  1444.       case "donate":
  1445.       url = "http://minimap.spatialviews.com/index.php?option=com_content&view=article&id=31&Itemid=54";
  1446.       break;
  1447.  
  1448. }
  1449.   var newTab = mainWindow.getBrowser().addTab(url);
  1450.   mainWindow.getBrowser().selectedTab = newTab;    
  1451. }
  1452.  
  1453. function openMinimapEmbed(){
  1454.     var ds = flock_mapsGetDS();
  1455.       var container = ds.getNode("urn:flock:maps:addresses");
  1456.       var tree = $('address_list');
  1457.       var treeSelection = flock_getTreeSelection(tree, ["idCol"]);
  1458.       for (var i = 0; i < treeSelection.length; ++i) {
  1459.       var item = treeSelection[i];
  1460.       var objectId = item["idCol"];
  1461.       var node = ds.getNode(objectId);
  1462.       var nodelat = node.getTarget(_mns('lat')).getValue();
  1463.       var nodelng = node.getTarget(_mns('lng')).getValue();
  1464.       var nodetitle = node.getTarget(_mns('title')).getValue();
  1465.       var params = {
  1466.       title: nodetitle,
  1467.       lat: nodelat,
  1468.       lng: nodelng,
  1469.       cancelled: false
  1470.       };
  1471.     window.openDialog("chrome://minimap/content/embed.xul", "_blank", "chrome, centerscreen", params);
  1472.     }
  1473. }
  1474.  
  1475.  
  1476. function directionsTextboxFrom(value){
  1477. $('directions-from-textbox').value = value;
  1478. }
  1479.  
  1480. function directionsTextboxTo(value){
  1481. $('directions-to-textbox').value = value;
  1482. }